//plugins/axios.ts
import axios from "axios";
import { ElMessage } from "element-plus";
import router from "../router/index.ts";
import { useTokenStore } from "../stores/token.ts";


const baseURL = "/api";
const axiosInstance = axios.create({ baseURL });

//添加请求拦截器
axiosInstance.interceptors.request.use(
  (config) => {
    //config是请求的配置对象
    //如果有token,则添加到请求头中
    const tokenStore = useTokenStore(); //位置一定要放在这里 放在外面就会造成在Vue 实例化或应用挂载前尝试访问 store
    if (tokenStore.token) {
      config.headers["Authorization"] = tokenStore.token;
    }
    return config;
  },

  (error) => {
    return Promise.reject(error);
  }
);

//添加响应拦截器
axiosInstance.interceptors.response.use(
  (response: any) => {
    //判断响应头中是否有token
    const token = response.headers.Authorization;
    if (token && token != "") {
      //将token保存到本地
      useTokenStore().setToken(token);
    }
    //console.log('响应', response);  // 使用逗号分隔会打印对象
    return response;
  },

  (error: any) => {
    if (error.response) {
      switch (error.response.status) {
        case 401:
          // 未认证处理
          //console.log(error.response.data);
          ElMessage.error(error.response.data.message);
          const tokenStore = useTokenStore(); 
          tokenStore.removeToken();
          setTimeout(() => {
            router.push("/login");
          }, 1000);
          break;
        
        default:
          // 其他错误
          ElMessage.error("服务异常");
          break;          
      }
    } else if (error.request) {
      // 请求被发出，但没有收到响应
      ElMessage.error("网络请求未响应");
    } else {
      // 发生了其他类型的错误
      ElMessage.error("请求错误: " + error.message);     
    }
    
    return Promise.reject(error.response); // 这里返回错误，让单独的请求能够捕获并处理
  }
);
export default axiosInstance;
